package com.zhaoyh.framework.taglib;

import com.zhaoyh.framework.code.model.PageBean;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;

/**
 * <p>
 * Title: 信息管理系统通用平台
 * </p>
 * <p>
 * Description: Information Management System Universal Platform
 * </p>
 * <p>
 * Copyright: Copyright (c) 2011
 * </p>
 * 
 * @author cmore
 * @version 1.0
 */
@SuppressWarnings("serial")
public class PageSpanAjaxTag extends BodyTagSupport {

	private String beanName = null;
	private String ajaxFunction = "pageAjax";

	public PageSpanAjaxTag() {
	}

	public void setBeanName(String beanName) {
		this.beanName = beanName;
	}

	@Override
	public int doEndTag() throws JspException {
		try {
			if (this.beanName == null || "".equals(this.beanName)) {
				this.beanName = "pageBean";
			}
			PageBean pageBean = (PageBean) pageContext.getRequest().getAttribute(this.beanName);
			if (pageBean == null) {
				return super.doEndTag();
			}
			if (pageBean.getDataSum() == 0) {
				return super.doEndTag();
			}
			pageContext.getOut().print(styleOne(pageBean));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return super.doEndTag();
	}

	public String getAjaxFunction() {
		return ajaxFunction;
	}

	public void setAjaxFunction(String ajaxFunction) {
		this.ajaxFunction = ajaxFunction;
	}

	private String styleOne(PageBean pageBean) {
		StringBuilder bfString = new StringBuilder("<p id = 'p-page'>");
		// 隐藏属性
		bfString.append("<input type='hidden' id='currentPageHQiu' name='pageNumber' value='1'/>");

		// 上一页
		if (pageBean.getPageNumber() - 1 <= 0) {
			bfString.append("<span id='s-first' style='color:#d5d5d5;'>上一页</span>");
		} else {
			bfString.append("<span id='s-first' onclick=" + ajaxFunction + "(" + (pageBean.getPageNumber() - 1)
					+ ") >上一页</span>");
		}

		// 第一页
		if (pageBean.getPageNumber() != 1)
			bfString.append("<span onclick=" + ajaxFunction + "(" + 1 + ") >1</span>");
		if (pageBean.getPageNumber() > 4)
			bfString.append("...&nbsp;&nbsp;&nbsp;");

		// 当前页前2个页码
		for (int i = pageBean.getPageNumber() - 2, c = 2; c > 0; i++, c--) {
			if (i < 2)
				continue;
			bfString.append("<span onclick=" + ajaxFunction + "(" + i + ") >" + i + "</span>");
		}

		// 当前页
		bfString.append("<span class='cur-s-page'>" + pageBean.getPageNumber() + "</span>");

		// 当前页后2个页码
		for (int i = pageBean.getPageNumber() + 1, c = 2; i < pageBean.getPageSum() && c > 0; i++, c--)
			bfString.append("<span onclick=" + ajaxFunction + "(" + i + ") >" + i + "</span>");
		// ...
		if (pageBean.getPageNumber() + 3 < pageBean.getPageSum())
			bfString.append("...&nbsp;&nbsp;&nbsp;");

		// 最后一页
		if (pageBean.getPageNumber() != pageBean.getPageSum())
			bfString.append("<span onclick=" + ajaxFunction + "(" + pageBean.getPageSum() + ") >"
					+ pageBean.getPageSum() + "</span>");

		// 下一页
		if (pageBean.getPageNumber() >= pageBean.getPageSum()) {
			bfString.append("<span id='s-last' style='color:#d5d5d5;'>下一页</span>");
		} else {
			bfString.append("<span id='s-last' onclick=" + ajaxFunction + "(" + (pageBean.getPageNumber() + 1)
					+ ") >下一页</span>");
		}
		bfString.append("</p>");
		return bfString.toString();
	}

	private String styleTwo(PageBean pageBean) {
		StringBuilder bfString = new StringBuilder("");
		bfString.append("<input type='hidden' value='1' id = 'currentPageHQiu' name='pageNumber' />");
		// 上一页
		if (pageBean.getPageNumber() - 1 <= 0) {
			bfString.append("<a href='javascript:void(0)'>&nbsp;&lt;&nbsp;</a>");
		} else {
			bfString.append("<a id='s-first' href='javascript:void(0)' onclick = " + ajaxFunction + "("
					+ (pageBean.getPageNumber() - 1) + ") >&nbsp;&lt;&nbsp;</a>");
		}

		if (pageBean.getPageSum() <= 10) {
			for (int i = 1; i <= pageBean.getPageSum(); i++) {
				if (i == pageBean.getPageNumber()) {
					bfString.append(" <span class='page-current'>" + pageBean.getPageNumber() + "</span>");
					continue;
				}
				bfString.append(
						" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i + "</a>");
			}
		} else {
			// 当前页前面多于四个页面
			if (pageBean.getPageNumber() > 4) {
				bfString.append(
						" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + 1 + ") >" + 1 + "</a>");
				bfString.append(" <a href='javascript:void(0)' >...</a>");
				// 当前页后剩余页码
				if (pageBean.getPageSum() - pageBean.getPageNumber() > 4) {
					// 当前页前一个页码
					for (int i = pageBean.getPageNumber() - 2, c = 2; c > 0; i++, c--) {
						bfString.append(" <a href='javascript:void(0)' onclick =  " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
					bfString.append(" <span class='page-current'>" + pageBean.getPageNumber() + "</span>");
					for (int i = pageBean.getPageNumber() + 1, c = 2; i <= pageBean.getPageSum() && c > 0; i++, c--) {
						bfString.append(" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
					// ...
					bfString.append(" <a href='javascript:void(0)' >...</a>");
					for (int i = pageBean.getPageSum() - 1, c = 2; i <= pageBean.getPageSum() && c > 0; i++, c--) {
						bfString.append(" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
				} else {
					// 当前页
					for (int i = pageBean.getPageSum() - 7; i <= pageBean.getPageSum(); i++) {
						if (i == pageBean.getPageNumber()) {
							bfString.append(" <span class='page-current'>" + pageBean.getPageNumber() + "</span>");
							continue;
						}
						bfString.append(" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
				}
			} else {
				// 当前所有页码
				for (int i = 1; i < pageBean.getPageNumber(); i++) {
					bfString.append(
							" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i + "</a>");
				}
				// 当前页
				bfString.append(" <span class='page-current'>" + pageBean.getPageNumber() + "</span>");

				// 当前页后页码
				for (int i = pageBean.getPageNumber() + 1, c = 7 - pageBean.getPageNumber(); i < pageBean.getPageSum()
						&& c > 0; i++, c--) {
					bfString.append(
							" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i + "</a>");
				}
				// 剩余页码数
				if (pageBean.getPageSum() - 10 > 0) {
					bfString.append(" <a href='javascript:void(0)' >...</a>");
					for (int i = pageBean.getPageSum() - 1, c = 2; i <= pageBean.getPageSum() && c > 0; i++, c--) {
						bfString.append(" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
				} else {
					for (int i = pageBean.getPageNumber() + 1; i <= pageBean.getPageSum(); i++) {
						bfString.append(" <a href='javascript:void(0)' onclick = " + ajaxFunction + "(" + i + ") >" + i
								+ "</a>");
					}
				}
			}
		}

		// 下一页
		if (pageBean.getPageNumber() >= pageBean.getPageSum()) {
			bfString.append("<a href='javascript:void(0)'>&nbsp;&gt;&nbsp;</a>");
		} else {
			bfString.append("<a id='s-first' href='javascript:void(0)' onclick = " + ajaxFunction + "("
					+ (pageBean.getPageNumber() + 1) + ") >&nbsp;&gt;&nbsp;</a>");
		}
		bfString.append("");
		return bfString.toString();
	}
}